#ifndef PROVIDER_H_
#define PROVIDER_H_

#include <string>

/**
 * @brief 定义提供者数据结构
 * 
 * 该结构体包含指向数据的指针和数据的大小，用于在提供者之间传递信息。
 */
typedef struct {
    const char *data; // 数据指针
    int size;         // 数据大小
} ProviderData;

/**
 * @class Provider
 * 
 * @brief 服务提供者基类
 * 
 * 该类用于创建服务提供者对象，提供者可以接收和处理请求。通过定义服务的名称和子名称来初始化提供者对象。
 */
class Provider
{
public:
    /**
     * @brief 构造函数
     * 
     * 初始化Provider对象，设置应用名称和子名称。
     * 
     * @param app_name 应用名称，标识提供者所属的应用
     * @param sub_name 子名称，用于进一步描述提供者的特定方面
     */
    Provider(const std::string &app_name, const std::string &sub_name);

    /**
     * @brief 处理接收到的请求的纯虚函数
     * 
     * 提供者类必须实现该函数以处理请求和生成响应。
     * 
     * @param req 指向接收到的请求数据的指针
     * @param res 指向要发送的响应数据的指针
     * @return bool 表示请求处理是否成功的布尔值
     */
    virtual bool received(ProviderData *req, ProviderData *res) = 0;

    /**
     * @brief 获取应用名称
     * 
     * @return std::string 返回提供者的应用名称
     */
    std::string appName() const;

    /**
     * @brief 获取子名称
     * 
     * @return std::string 返回提供者的子名称
     */
    std::string subName() const;

private:
    std::string app_name_; // 应用名称
    std::string sub_name_; // 子名称
};

#endif